package org.xwb.pecs;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class ProducerExtendsConsumerSuper {
    public static void main(String[] args) {
        Predicate<Number> isPositive = n->n.doubleValue() > 0 ;
        Predicate<Integer> isPositive1 = n-> n.doubleValue() > 0 ;

        Set<Number> set = Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        set.stream().filter(isPositive).forEach(System.out::println);
        // 编译报错
        // 消费者使用的是 <? super T> ,要使用父类
//        set.stream().filter(isPositive1).forEach(System.out::println);


        /**
         * 消费者错误使用 <? extends T>
         */
        List<? extends Number> list = new ArrayList<Integer>();
        // 编译错误！无法写入
//        list.add(42);

        /**
         * 生产者错误使用 <? super T>
         */
        List<? super Integer> list01 = new ArrayList<Number>();
        list01.add(42);
        Integer i = (Integer)list01.get(0);
        System.out.println(i);


    }
}
